今天要開始實作server端口,server端口分成兩個部分,建立端口資訊跟接收端口。
首先,我們先實作端口資訊的部分,使用我們前天製作的gRPC_Server,如果忘記可以回頭去看這裡,將原本的入口點刪掉,改成新增一個資料夾server,並且新增一個method,叫gRPCService,並重新設定好主程式入口
端口資訊主要有四個部分,
public static void main(String[] args) throws IOException, InterruptedException {
//設定port號
ServerBuilder serverBuilder = ServerBuilder.forPort(5000);
//發布Impl的服務器
serverBuilder.addService("這邊放置我們的實作連線");
//建立服務器
Server server = serverBuilder.build();
//啟用服務器
server.start();
server.awaitTermination();
}
第一行是先設定好我們要連線的port號,這邊設定為5000 port
第二行要發布我們的接收端口,等一下會實作這個,先空著等等回來填
第三行要建立一個server對象,讓我們的server可以被正常的啟動起來
最後加上兩個method,啟用服務器,讓我們的服務器可以順利被啟動起來,這樣就完成我們的端口資訊。
接下來製作接收端口,在同一個資料夾底下新增IronManServiceImpl。
基本上的命名慣例都是這樣:XXXImpl,當然你要給它特別的名稱也可以,只是大部分人都這樣寫,我們就從善如流。
在class內點選generante,選擇override method,選擇我們要override的對象ironMan01這個method。
這個部分之前已經在.proto檔中的IronManService設定過了,如果忘記的話可以看這裡。
server的部份我們寫上:
public void ironMan01(IronManProto.IronManRequest01 request, StreamObserver<IronManProto.IronManResponse01> responseObserver) {
//接收來自client端的參數
String name = request.getName();
String age = request.getAge();
System.out.println("Server接收到的數據: name:" + name + ", age:" + age);
//提供server端返回值
//建立回傳
IronManProto.IronManResponse01.Builder builder = IronManProto.IronManResponse01.newBuilder();
//放入回傳值
builder.setResult("我是server端,接收到數據:" + name +" 以及 " + age + " -> 返回response");
//將回傳值封裝
IronManProto.IronManResponse01 ironManResponse01 = builder.build();
//回傳給Client
responseObserver.onNext(ironManResponse01);
responseObserver.onCompleted();;
}
一開始我們先定義好接收的request,並且將值印出來。
然後我們要建立response,建立一個builder當作response,並且設定好回傳值的內容,再將回傳值封裝。
最後我們調用responseObserver.onNext()這個method將值回傳給client,再使用responseObserver.onCompleted()回傳一個標記給client,代表我們的回傳已經結束。
最後,還記得前面的端口資訊有一個地方還沒寫嗎? 所以我們補上:
serverBuilder.addService(new IronManServiceImpl());
到這邊為止,我們就已經完成server端的實作了,明天我們會說明responseObserver這個method的內容。